# 9、柱状图
# import matplotlib as mpl
# import matplotlib.pyplot as plt
# mpl.rcParams["font.sans-serif"]=["simHei"]
# mpl.rcParams["axes.unicode_minus"]=False
# # some simple data
# x=[1,2,3,4,5]
# y=[6,10,4,5,1]
# # create bar
# plt.bar(x,y,align="center",color="b",tick_label=["A","B","C","D","E"],alpha=0.6)
# # set x.y_axis label
# plt.xlabel("测试难度")
# plt.ylabel("试卷份数")
# # set yaxis grid
# #plt.grid(True,axis="y",ls=":",color="r",alpha=0.3)
# plt.show()


# (2)代码精讲
# 为了展示图表里的中文字体，我们选择字体“SimHei”，通过
# “mpl.rcParams["font.sans-serif']=["SimHei"]”完成字体配置任务。通过
# “mpl.rcParams["axes.unicode_minus"]=False”语句处理坐标轴轴线的刻度
# 标签是负数的情况，实现模式的选择。
# bar(x,y,align="center",color="b",tick_label=["A","B","C","D","E"],alpha=0.6)
# 语句中各参数的含义。
# ● x:柱状图中的柱体标签值。
# ● y:柱状图中的柱体高度。
# ● align:柱体对齐方式。
# ● color:柱体颜色。
# ● tick_label:刻度标签值。
# ● alpha:柱体的透明度。
# 上面代码中，A～E 分别代表测试难度级别，具体位置由列表 x 确定，柱体中心
# 点放在列表 x 的元素值处，柱体颜色设定为蓝色，柱体高度用列表 y 中的元素
# 确定，列表 y 中的元素代表试卷份数。



# 10、条形图
# 如果将柱状图中的柱体由垂直方向变成水平方向，柱状图就变成条形图，函数也就变成
# 其中参数x 是 y 轴上柱体标签值，y 是柱体的宽度，在 x 轴上显示，tick_label 表示 y轴上的柱体标签值。
# import matplotlib as mpl
# import matplotlib.pyplot as plt
# mpl.rcParams["font.sans-serif"]=["SimHei"]
# mpl.rcParams["axes.unicode_minus"]=False
# # some simple data
# x=[1,2,3,4,5]
# y=[6,10,4,5,1]
# # create horizontal bar
# plt.barh(x,y,align="center",color="c",tick_label=["A","B","C","D","E"])
# # set x,y_axis label
# plt.ylabel("测试难度")
# plt.xlabel("试卷份数")
# # set xaxis grid
# plt.grid(True,axis="x",ls=":",color="r",alpha=0.3)
# plt.show()


#
# 11、堆积图
# 1.堆积柱状图
# 如果将函数 bar()中的参数 bottom 的取值设定为列表 y，列表 y1=[2,6,3,8,5]
# 代表另一套试卷的份数，函数 bar(x,yl,bottom=y,color="r")就会输出堆积柱状图。
# import matplotlib as mpl
# import matplotlib.pyplot as plt
# mpl.rcParams["font.sans-serif"]=["SimHei"]
# mpl.rcParams["axes.unicode_minus"]=False
# # some simple data
# x=[1,2,3,4,5]
# y=[6,10,4,5,1]
# y1=[2,6,3,8,5]
# # create bar
# plt.bar(x,y,align="center",color="#66c2a5",tick_label=["A","B","C","D","E"],label="班级 A")
# plt.bar(x,y1,align="center",bottom=y,color="#8da0cb",label="班级 B")
# # set x,y_axis label
# plt.xlabel("测试难度")
# plt.ylabel("试卷份数")
# plt.show()
# #plt.show()


# 2.堆积条形图
# 如果将函数 barh(中的参数 left 的取值设定为列表 y,列表 y1=[2,6,3,8,5]代
# 表另一套试卷的份数，函数 barh(x,yl,lef=y,color="r")就会输出堆积条形图。
# import matplotlib as mpl
# import matplotlib.pyplot as plt
# mpl.rcParams["font.sans-serif"]=["SimHei"]
# mpl.rcParams["axes.unicode_minus"]=False
# # some simple data
# x=[1,2,3,4,5]
# y=[6,10,4,5,1]
# y1=[2,6,3,8,5]
# # create horizontal bar
# plt.barh(x,y,align="center",color="#66c2a5",tick_label=["A","B","C","D","E"],label="班级 A")
# plt.barh(x,y1,align="center",left=y,color="#8da0cb",label="班级 B")
# # set x,y_axis label
# plt.ylabel("测试难度")
# plt.xlabel("试卷份数")
# plt.legend()
# plt.show()



# 3.4 分块图
# 1.多数据并列柱状图
# 对于堆积柱状图言，可以选择多数据并列柱状图来改变堆积柱状图的可视化效
# 果。堆积条形图也可以改变可视化效果，呈现多数据平行条形图的图形样式。
# import matplotlib as mpl
# import matplotlib.pyplot as plt
# import numpy as np
# mpl.rcParams["font.sans-serif"]=["SimHei"]
# mpl.rcParams["axes.unicode_minus"]=False
# # some simple data
# x=np.arange(5)
# y=[6,10,4,5,1]
# y1=[2,6,3,8,5]
# bar_width=0.35
# tick_label=["A","B","C","D","E"]
# # create bar
# plt.bar(x,y,bar_width,color="c",align="center",label="班级 A",alpha=0.5)
# plt.bar(x+bar_width,y1,bar_width,color="b",align="center",label="班级B",alpha=0.5)
# # set x,y_axis label
# plt.xlabel("测试难度")
# plt.ylabel("试卷份数")
# # set xaxis ticks and ticklabels
# plt.xticks(x+bar_width/2,tick_label)
# plt.xticks(x,tick_label)
# plt.legend()
# plt.show()



# 2.多数据平行条形图多数据平行条形图与多数据并列柱状图的实现方法是类似
# 的，只是调用函数由 bar()变成 barh()。
# import matplotlib as mpl
# import matplotlib.pyplot as plt
# import numpy as np
# mpl.rcParams["font.sans-serif"]=["SimHei"]
# mpl.rcParams["axes.unicode_minus"]=False
# # some simple data
# x=np.arange(5)
# y=[6,10,4,5,1]
# y1=[2,6,3,8,5]
# bar_width=0.35
# tick_label=["A","B","C","D","E"]
# # create horizontal bar
# plt.barh(x,y,bar_width,color="c",align="center",label="班级 A",alpha=0.5)
# plt.barh(x+bar_width,y1,bar_width,color="b",align="center",label="班级 B",alpha=0.5)
# # set x;y_axis label
# plt.xlabel("试卷份数")
# plt.ylabel("测试难度")
# plt.yticks(x+bar_width/2,tick_label)
# plt.legend()
# plt.show()



# 12、参数探索
#  如果想在柱体上绘制装饰线或装饰图，也就是说，设置柱体的填充样式。
# 我们可以使用关键字参数 hatch，关键字参数 hatch 可以有很多取值，例如，
# "/","\","｜","_"等，每种符号字符串都是一种填充柱体的几何样式。而且，
# 符号字符串的符号数量越多，柱体的几何图形的密集程度越高。
# # -*- coding:utf-8 -*-
# import matplotlib as mpl
# import matplotlib.pyplot as plt
# mpl.rcParams["font.sans-serif"]=["SimHei"]
# mpl.rcParams["axes.unicode_minus"]=False
# # some simple data
# x=[1,2,3,4,5]
# y=[6,10,4,5,1]
# #create bar
# plt.bar(x,y,align="center",color="c",tick_label=["A","B","C","D","E"],hatch="///")
# # set x,y_axis label
# plt.xlabel("测试难度")
# plt.ylabel("试卷份数")
# plt.show()



# 13、雷达图
import numpy as np
import matplotlib.pyplot as plt
# 中文和负号的正常显示
plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'
plt.rcParams['axes.unicode_minus'] = False
#使用 ggplot 的风格绘图
plt.style.use('ggplot')
#构造数据
values = [3.2,2.1,3.5,2.8,3,4]
values_1 = [2.4,3.1,4.1,1.9,3.5,2.3]
feature = ['个人能力','QC 知识',"解决问题能力","服务质量意识","团队精神","IQ"]
N = len(values)
#设置雷达图的角度，用于平分切开一个平面
angles = np.linspace(0,2*np.pi,N,endpoint=False)
#使雷达图封闭起来
values = np.concatenate((values,[values[0]]))
angles = np.concatenate((angles,[angles[0]]))
values_1 = np.concatenate((values_1,[values_1[0]]))
#绘图
fig = plt.figure()

ax = fig.add_subplot(111, polar=True)
#绘制折线图并填充颜色
ax.plot(angles,values,'o-',linewidth=2,label='活动前')
ax.fill(angles,values,'r',alpha=0.5)
ax.plot(angles,values_1,'o-',linewidth=2,label='活动后')
ax.fill(angles,values_1,'b',alpha=0.5)

#添加每个特质的标签
# ax.set_thetagrids(angles*180/np.pi,feature)
#设置极轴范围
ax.set_ylim(0,5)
#添加标题
plt.title('活动前后员工状态')
#增加网格纸
ax.grid(True)


plt.show()